#include "comm.h" 

int main() {
    umask(0);
    if(mkfifo(FILE_NAME, 0666) < 0) {
        perror("mkfifo error");
        exit(1);
    }
    int fd = open(FILE_NAME, O_RDONLY);
    if(fd < 0) {
        perror("open error");
        exit(2);
    }
    char message[256];
    while(true) {
        message[0] = '\0';
        ssize_t s = read(fd, message, sizeof(message) - 1);
        if(s > 0) {
            message[s] = '\0';
            printf("client: %s\n", message);
            pid_t id = fork();
            if(id == 0) {
                execlp(message, message, NULL);
                exit(1);
            }
            waitpid(-1, NULL, 0);
        }else if(s == 0) {
            printf("client quit!\n");
            break;
        }else {
            printf("read error!\n");
            break;
        }
    }
    close(fd);
    return 0;
}







































// #include "comm.h"

// int main() {
//     umask(0);
//     if(mkfifo(FILE_NAME, 0666) < 0) {
//         perror("mkfifo error");
//         exit(1);
//     }
//     int fd = open(FILE_NAME, O_RDONLY);
//     if(fd < 0) {
//         perror("open error");
//         exit(1);
//     }
//     char message[256];
//     while(true) {
//         message[0] = '\0';
//         ssize_t s = read(fd, message, sizeof(message) - 1);
//         if(s > 0) {
//             message[s] = '\0';
//             printf("client: %s\n", message);
//             char* oper = "+-*/%";
//             char* p = message;
//             int flag = 0;
//             while(*p) {
//                 switch(*p) {
//                     case '+': 
//                         flag = 0;
//                         break;
//                     case '-':
//                         flag = 1;
//                         break;
//                     case '*':
//                         flag = 2;
//                         break;
//                     case '/':
//                         flag = 3;
//                         break;
//                     case '%':
//                         flag = 4;
//                         break;
//                 }
//                 p++;
//             }
//             char* data1 = strtok(message, "+-*/%");
//             char* data2 = strtok(NULL, "+-*/%");
//             int num1 = atoi(data1);
//             int num2 = atoi(data2);
//             int ret = 0;
//             switch(flag) {
//                 case 0:
//                     ret = num1 + num2;
//                     break;
//                 case 1:
//                     ret = num1 - num2;
//                     break;
//                 case 2:
//                     ret = num1 * num2;
//                     break;
//                 case 3:
//                     ret = num1 / num2;
//                     break;
//                 case 4:
//                     ret = num1 % num2;
//                     break;
//             }
//             printf("%d %c %d = %d\n", num1, oper[flag], num2, ret);
//         }
//         else if (s == 0) {
//             printf("client quit!\n");
//             break;
//         }else {
//             printf("read error!\n");
//             break;
//         }
//     }
//     close(fd);
//     return 0;
// }